﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Recursos.Model;

namespace Recursos
{
    public partial class WebForm2 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var userSecurity = ((Usuario)Session["UserLogged"]);
            var permisos = new PermisosModel();
            if (userSecurity == null)
                Response.Redirect("~/NoAccess.aspx");
            if (!Page.IsPostBack && userSecurity!= null && permisos.obtenerRolUsuario(userSecurity.Cedula).Equals("Administrador"))
                BindData();
            
            else if (userSecurity == null || !permisos.obtenerRolUsuario(userSecurity.Cedula).Equals("Administrador"))
            {
                Response.Redirect("~/NoAccess.aspx");
            }
        }

        public void BindData()
        {
            var espacio = new EspacioModel();
            var espacios = espacio.CargarEspacios();
            GridView1.DataSource = espacios;
            GridView1.DataBind();
            
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            var t = e.Row.RowType;

            if (t == DataControlRowType.DataRow)
            {
                if (this.GridView1.EditIndex >= 0 && e.Row.RowIndex == this.GridView1.EditIndex)
                {
                    var d = e.Row.FindControl("DropdownSede") as DropDownList;
                    var em = e.Row.DataItem as Espacio;
                    var sedes = new SedeModel();
                    d.DataSource = sedes.CargarSedes();
                    d.DataBind();
                    d.SelectedValue = em.IdSede.ToString();

                    d = e.Row.FindControl("DropdownCarrera") as DropDownList;
                    em = e.Row.DataItem as Espacio;
                    var carreras = new CarrerasModel();
                    d.DataSource = carreras.CargarCarreras();
                    d.DataBind();
                    d.SelectedValue = em.IdCarrera.ToString();

                    d = e.Row.FindControl("DropdownTipo") as DropDownList;
                    em = e.Row.DataItem as Espacio;
                    var espacio = new EspacioModel();
                    d.DataSource = espacio.CargarTipo();
                    d.DataBind();
                    d.SelectedValue = em.IdTipo.ToString();

                    d = e.Row.FindControl("DropdownEstado") as DropDownList;
                    em = e.Row.DataItem as Espacio;
                    // En DB Disponible 0 Fuera de servicio 1
                    d.Items.Add("Disponible");
                    d.Items.Add("Fuera de Servicio");
                    d.DataBind();
                    d.SelectedValue = em.estado;

                }
            }
        }

        private int boolInt(bool tipo)
        {
            if (tipo == false)
                return 0;
            return 1;
        }

        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            e.Cancel = true;
            GridView1.EditIndex = -1;
            BindData();  
        }

        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            BindData();
        }

        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            GridViewRow row = GridView1.Rows[e.RowIndex];
            var txtCodigo = (TextBox)row.FindControl("Codigo");
            var txtDescripcion = (TextBox)row.FindControl("Descripcion");
            var txtCapacidad = (TextBox)row.FindControl("Capacidad");
            var dropCarrera = (DropDownList)row.FindControl("DropDownCarrera");
            var dropSede = (DropDownList)row.FindControl("DropDownSede");
            var dropTipo = (DropDownList)row.FindControl("DropDownTipo");
            var dropEstado = (DropDownList)row.FindControl("DropDownEstado");
            var espacioId = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
            var codigo = txtCodigo.Text;
            var carrera = int.Parse(dropCarrera.SelectedValue);
            var tipo = int.Parse(dropTipo.SelectedValue);
            var sede = int.Parse(dropSede.SelectedValue);
            var capacidad = int.Parse(txtCapacidad.Text);
            var descripcion = txtDescripcion.Text;
            var espacios = new EspacioModel();
            var estado = dropEstado.SelectedItem.Text;
            int cedula = ((Usuario)Session["UserLogged"]).Cedula;
            if (dropCarrera.SelectedValue == "" || dropSede.SelectedValue == "" || dropTipo.SelectedValue == "")
                return;
            int resultadoactualizacion = espacios.ActualizarEspacio(espacioId, codigo, sede, carrera, capacidad, estado, descripcion, tipo,cedula);
            GridView1.EditIndex = -1;
            BindData();
            if (resultadoactualizacion != 0)
                WebMsgBox.Show("Espacio " + codigo +" actualizado correctamente.", "Modificación de Espacios");
            else
                WebMsgBox.Show("Error: espacio " + codigo + " duplicado o no tiene permisos", "Modificación de Espacios");
        }

        protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {

            GridViewRow row = GridView1.Rows[e.RowIndex];
            var espacio = new EspacioModel();
            var espacioId = Int32.Parse(GridView1.DataKeys[e.RowIndex].Value.ToString());
            var espacioaeliminar = espacio.CargarPorId(espacioId);
            var reservaciones = new RservacionModel();
            var reservacion =
                reservaciones.CargarReservacionesNormalesEspacio(espacioId).Where(a => a.FechaInicio > DateTime.Now || a.FechaFinal > DateTime.Now);
            if (reservacion.Any())
            {
                WebMsgBox.Show("El espacio " + espacioaeliminar.Codigo  + " no puede ser eliminado ya que tiene reservaciones.", "Modificación de Espacios");
                return;
            }
            int cedula = 123;
            var efectuada=espacio.ElminarEspacio(espacioId,cedula);
            BindData();
            if(efectuada==1)
                WebMsgBox.Show("El espacio " + espacioaeliminar.Codigo + " ha sido eliminado", "Eliminar Espacios");
            else
                WebMsgBox.Show("No tiene permisos para eliminar el espacio " + espacioaeliminar.Codigo, "Eliminar Espacios");

        }
    }
}